package view.usuarios;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
//import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import model.Instructor;
import model.Persona;
import model.PersonalAdministrativo;
import model.Usuario;
import model.comunication.IInstructor;
import model.comunication.IPersonalAdministrativo;
import model.comunication.IUsuario;

import com.toedter.calendar.JDateChooser;
import javax.swing.ImageIcon;
import java.awt.Toolkit;
import java.awt.Font;
// TODO AGREGAR EL COMBO PA SUPER INSTRU

public class ConsultaUsuario {

	private JDialog frmConsultarUsuario;

	private JTextField textUser;
	private JTextField textPassword;
	private IUsuario cmmUsuario;
	private JTextField textPermisos;
	private JTextField textId;
	private JCheckBox chckbxEditar;
	private IInstructor cmmInstructor;
	private IPersonalAdministrativo cmmPersonalAdministrativo;
	private JTextField textNombre;
	private JTextField textApellido;
	private JTextField textDireccion;
	private JTextField textTelefono;
	private JTextField textCelular;
	private JRadioButton rdbtnSupervisor;
	private JRadioButton rdbtnPersonalAdministrativo;
	private JDateChooser dateFechaNac;
	private JLabel lblTipo;
	private final ButtonGroup rdbuttonGroup = new ButtonGroup();
	private JLabel lblDatos;
	private JTextField textDni;
	private JLabel lblDni;
	private JRadioButton rdbtnInstructor;
	private JLabel lblErrorCampoObli;
	private JLabel label;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ConsultaUsuario window = new ConsultaUsuario();
					window.frmConsultarUsuario.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public ConsultaUsuario() {
		cmmUsuario = IUsuario.getInstance();
		cmmInstructor = IInstructor.getInstance();
		cmmPersonalAdministrativo = IPersonalAdministrativo.getInstance();
		initialize();

	}

	/**
	 * Create the application.
	 */
//	public ConsultaUsuario(Usuario usuario,JFrame frame) {

	public ConsultaUsuario(Usuario usuario) {
		cmmUsuario = IUsuario.getInstance();
		cmmInstructor = IInstructor.getInstance();
		cmmPersonalAdministrativo = IPersonalAdministrativo.getInstance();
//		initialize(frame);
		initialize();
		getUsuario(usuario);
		getEmpleado(usuario);
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {

//		frmConsultarUsuario = new JDialog(frame);
		frmConsultarUsuario = new JDialog();
		frmConsultarUsuario.setIconImage(Toolkit.getDefaultToolkit().getImage(ConsultaUsuario.class.getResource("/Icon_/User_128.png")));
		frmConsultarUsuario.setResizable(false);
		frmConsultarUsuario.setModal(false);//TODO buscar para que se bloquee
		frmConsultarUsuario.addWindowListener(new WindowAdapter() {
			@Override
			public void windowActivated(WindowEvent e) {
			}
		});
		frmConsultarUsuario.setAlwaysOnTop(true);
		frmConsultarUsuario.setTitle("Consultar Usuario");
		frmConsultarUsuario.setBounds(100, 100, 441, 478);
		frmConsultarUsuario.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		frmConsultarUsuario.getContentPane().setLayout(null);
		frmConsultarUsuario.setVisible(true);
		
		
		JLabel lblNombreUsuario = new JLabel("User Name:");
		lblNombreUsuario.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblNombreUsuario.setBounds(12, 33, 78, 14);
		frmConsultarUsuario.getContentPane().add(lblNombreUsuario);

		JLabel lblPassword = new JLabel("Password:");
		lblPassword.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblPassword.setBounds(12, 64, 93, 14);
		frmConsultarUsuario.getContentPane().add(lblPassword);

		JLabel lblPermisos = new JLabel("Permisos:");
		lblPermisos.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblPermisos.setBounds(12, 93, 78, 14);
		frmConsultarUsuario.getContentPane().add(lblPermisos);

		textUser = new JTextField();
		textUser.setEditable(false);
		textUser.setBounds(88, 30, 170, 20);
		frmConsultarUsuario.getContentPane().add(textUser);
		textUser.setColumns(10);

		textPassword = new JTextField();
		textPassword.setEditable(false);
		textPassword.setBounds(88, 61, 170, 20);
		frmConsultarUsuario.getContentPane().add(textPassword);
		textPassword.setColumns(10);

		JLabel lblNombre = new JLabel("Nombre:");
		lblNombre.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblNombre.setBounds(12, 119, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblNombre);

		JLabel lblApellido = new JLabel("Apellido:");
		lblApellido.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblApellido.setBounds(12, 151, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblApellido);

		JLabel lblTelefono = new JLabel("Telefono:");
		lblTelefono.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblTelefono.setBounds(12, 250, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblTelefono);

		JLabel lblDireccion = new JLabel("Direccion:");
		lblDireccion.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDireccion.setBounds(12, 217, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblDireccion);

		JLabel lblFechaDeNacimiento = new JLabel("Fecha de Nacimiento:");
		lblFechaDeNacimiento.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblFechaDeNacimiento.setBounds(10, 317, 150, 22);
		frmConsultarUsuario.getContentPane().add(lblFechaDeNacimiento);

		JLabel lblCelular = new JLabel("Celular:");
		lblCelular.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblCelular.setBounds(12, 284, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblCelular);

		textNombre = new JTextField();
		textNombre.setEditable(false);
		textNombre.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textNombre.setBounds(88, 119, 170, 22);
		frmConsultarUsuario.getContentPane().add(textNombre);
		textNombre.setColumns(10);

		textApellido = new JTextField();
		textApellido.setEditable(false);
		textApellido.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textApellido.setColumns(10);
		textApellido.setBounds(88, 151, 170, 22);
		frmConsultarUsuario.getContentPane().add(textApellido);

		textDireccion = new JTextField();
		textDireccion.setEditable(false);
		textDireccion.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textDireccion.setColumns(10);
		textDireccion.setBounds(88, 217, 170, 22);
		frmConsultarUsuario.getContentPane().add(textDireccion);

		textTelefono = new JTextField();
		textTelefono.setEditable(false);
		textTelefono.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textTelefono.setColumns(10);
		textTelefono.setBounds(88, 250, 170, 22);
		frmConsultarUsuario.getContentPane().add(textTelefono);

		textCelular = new JTextField();
		textCelular.setEditable(false);
		textCelular.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textCelular.setColumns(10);
		textCelular.setBounds(88, 284, 170, 22);
		frmConsultarUsuario.getContentPane().add(textCelular);

		dateFechaNac = new JDateChooser();
		dateFechaNac.setEnabled(false);
		dateFechaNac.getCalendarButton().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		dateFechaNac.setDateFormatString("yyyy/MM/dd");
		dateFechaNac.setBounds(149, 317, 127, 20);
		frmConsultarUsuario.getContentPane().add(dateFechaNac);

		lblTipo = new JLabel("Tipo:");
		lblTipo.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblTipo.setVisible(false);
		lblTipo.setBounds(10, 345, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblTipo);

		rdbtnPersonalAdministrativo = new JRadioButton("Personal Administrativo");
		rdbtnPersonalAdministrativo.setFont(new Font("Tahoma", Font.BOLD, 11));
		rdbtnPersonalAdministrativo.setVisible(false);
		rdbtnPersonalAdministrativo.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		rdbuttonGroup.add(rdbtnPersonalAdministrativo);
		rdbtnPersonalAdministrativo.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if (rdbtnSupervisor.isSelected() == true) {
					rdbtnSupervisor.setSelected(false);
				}
			}
		});
		rdbtnPersonalAdministrativo.setBounds(40, 346, 177, 23);
		frmConsultarUsuario.getContentPane().add(rdbtnPersonalAdministrativo);

		rdbtnSupervisor = new JRadioButton("Supervisor");
		rdbtnSupervisor.setFont(new Font("Tahoma", Font.BOLD, 11));
		rdbtnSupervisor.setVisible(false);
		rdbtnSupervisor.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		rdbuttonGroup.add(rdbtnSupervisor);
		rdbtnSupervisor.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if (rdbtnPersonalAdministrativo.isSelected() == true) {
					rdbtnPersonalAdministrativo.setSelected(false);
				}
			}
		});

		rdbtnSupervisor.setBounds(219, 345, 93, 23);
		frmConsultarUsuario.getContentPane().add(rdbtnSupervisor);

		lblDatos = new JLabel("Datos______________________________________________________________");
		lblDatos.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDatos.setEnabled(false);
		lblDatos.setBounds(10, 0, 473, 22);
		frmConsultarUsuario.getContentPane().add(lblDatos);

		textId = new JTextField();
		textId.setVisible(false);
		textId.setBounds(144, 403, 30, 22);
		frmConsultarUsuario.getContentPane().add(textId);
		textId.setColumns(10);
		frmConsultarUsuario.setVisible(true);

		textPermisos = new JTextField();
		textPermisos.setEditable(false);
		textPermisos.setBounds(88, 93, 170, 20);
		frmConsultarUsuario.getContentPane().add(textPermisos);
		textPermisos.setColumns(10);

		lblDni = new JLabel("D.N.I:");
		lblDni.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblDni.setBounds(12, 184, 73, 22);
		frmConsultarUsuario.getContentPane().add(lblDni);

		textDni = new JTextField();
		textDni.setEditable(false);
		textDni.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textDni.setColumns(10);
		textDni.setBounds(88, 184, 170, 22);
		frmConsultarUsuario.getContentPane().add(textDni);

		rdbtnInstructor = new JRadioButton("Instructor");
		rdbtnInstructor.setFont(new Font("Tahoma", Font.BOLD, 11));
		rdbtnInstructor.setVisible(false);
		rdbtnInstructor.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		rdbuttonGroup.add(rdbtnInstructor);
		rdbtnInstructor.setBounds(322, 345, 93, 23);
		frmConsultarUsuario.getContentPane().add(rdbtnInstructor);

		lblErrorCampoObli = new JLabel("No completo los campos obligatorios");
		lblErrorCampoObli.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblErrorCampoObli.setVisible(false);
		lblErrorCampoObli.setForeground(Color.RED);
		lblErrorCampoObli.setBounds(12, 375, 340, 15);
		frmConsultarUsuario.getContentPane().add(lblErrorCampoObli);

		final JButton btnGuardar = new JButton("Guardar");
		btnGuardar.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnGuardar.setIcon(new ImageIcon(ConsultaUsuario.class.getResource("/Icon_/save_16.png")));
		btnGuardar.setEnabled(false);
		btnGuardar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int id = Integer.parseInt(textId.getText());// chantada
				Usuario usuario = cmmUsuario.getUsuario(id);
				
				usuario.setName(textUser.getText());
				usuario.setPassword(textPassword.getText());
//				usuario.setPermisos(textPermisos.getText());

				cmmUsuario.updateUsuario(usuario);
				
				if (usuario.getPermisos().equals("Personal Admin") || usuario.getPermisos().equals("Supervisor")) {
					PersonalAdministrativo personal = cmmPersonalAdministrativo.find(id);
					
					cargarEmpleado(personal);
					
//					personal.setNombre(textNombre.getText());
//					personal.setApellido(textApellido.getText());
//					personal.setDNI(textDni.getText());
//					personal.setEmail(textDireccion.getText());
//					personal.setTelefono(textTelefono.getText());
//					personal.setCelular(textCelular.getText());
//					personal.setNacimiento(dateFechaNac.getCalendar());
					
					
					
					cmmPersonalAdministrativo.updatePersonalAdministrativo(personal);
					
					
				}
				
				else if(usuario.getPermisos().equals("Instructor")){
					Instructor instructor = cmmInstructor.findInstructor(id);
					
//					instructor.setNombre(textNombre.getText());
//					instructor.setApellido(textApellido.getText());
//					instructor.setDNI(textDni.getText());
//					instructor.setEmail(textDireccion.getText());
//					instructor.setTelefono(textTelefono.getText());
//					instructor.setCelular(textCelular.getText());
//					instructor.setNacimiento(dateFechaNac.getCalendar());
					
					cargarEmpleado(instructor);
					
					cmmInstructor.updateInstructor(instructor);
				}
				
				frmConsultarUsuario.dispose();
				EmpleadoModificado emplModif = new EmpleadoModificado(usuario.getName());
			}
		});

		btnGuardar.setBounds(315, 400, 100, 29);
		frmConsultarUsuario.getContentPane().add(btnGuardar);

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				frmConsultarUsuario.dispose();
			}
		});
		btnCancelar.setIcon(new ImageIcon(ConsultaUsuario.class.getResource("/Icon_/exit.png")));
		btnCancelar.setBounds(184, 400, 118, 29);
		frmConsultarUsuario.getContentPane().add(btnCancelar);

		chckbxEditar = new JCheckBox("editar");
		chckbxEditar.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if (chckbxEditar.isSelected() == true) {
					textUser.setEditable(true);
					textPassword.setEditable(true);
					textNombre.setEditable(true);
					textApellido.setEditable(true);
//					textDni.setEditable(true);
					textDireccion.setEditable(true);
					textTelefono.setEditable(true);
					textCelular.setEditable(true);
					dateFechaNac.setEnabled(true);
					btnGuardar.setEnabled(true);
				} else {
					textUser.setEditable(false);
					textPassword.setEditable(false);
					textNombre.setEditable(false);
					textApellido.setEditable(false);
//					textDni.setEditable(false);
					textDireccion.setEditable(false);
					textTelefono.setEditable(false);
					textCelular.setEditable(false);
					dateFechaNac.setEnabled(false);
					btnGuardar.setEnabled(false);
				}
			}
		});
		chckbxEditar.setBounds(315, 370, 97, 23);
		frmConsultarUsuario.getContentPane().add(chckbxEditar);
		
		label = new JLabel("");
		label.setIcon(new ImageIcon(ConsultaUsuario.class.getResource("/Icon_/Info_128.png")));
		label.setBounds(288, 33, 127, 140);
		frmConsultarUsuario.getContentPane().add(label);

	}

	private void getUsuario(Usuario u) {
		textUser.setText(u.getName());
		textPassword.setText(u.getPassword());
		textPermisos.setText(u.getPermisos());
		textId.setText(u.getId().toString()); // TODO chantada para saber cual usuario es al q se consulta para modificarl

	}

	private void getEmpleado(Usuario user) {
		
		if (user.getPermisos().equals("Personal Admin") || user.getPermisos().equals("Supervisor")) {
			PersonalAdministrativo personal = cmmPersonalAdministrativo.find(user.getId());
			
			textNombre.setText(personal.getNombre());
			textApellido.setText(personal.getApellido());
			textDni.setText(personal.getDNI());
			textDireccion.setText(personal.getEmail());
			textTelefono.setText(personal.getTelefono());
			textCelular.setText(personal.getCelular());
			dateFechaNac.setCalendar(personal.getNacimiento());
		}
		else if (user.getPermisos().equals("Instructor")) {
			Instructor instructor = cmmInstructor.findInstructor(user.getId());
			
			textNombre.setText(instructor.getNombre());
			textApellido.setText(instructor.getApellido());
			textDni.setText(instructor.getDNI());
			textDireccion.setText(instructor.getEmail());
			textTelefono.setText(instructor.getTelefono());
			textCelular.setText(instructor.getCelular());
			dateFechaNac.setCalendar(instructor.getNacimiento());
		}
	
	}

	private void cargarEmpleado(Persona p){
		
		p.setNombre(textNombre.getText());
		p.setApellido(textApellido.getText());
		p.setDNI(textDni.getText());
		p.setEmail(textDireccion.getText());
		p.setTelefono(textTelefono.getText());
		p.setCelular(textCelular.getText());
		p.setNacimiento(dateFechaNac.getCalendar());
	}
}